﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PlanningGIS.ManageUtility.Modules
{
    /// <summary>
    /// 用户信息实体对象
    /// </summary>
    public class UserInfo
    {
        /// <summary>
        /// 编号
        /// </summary>
        public string ID { get; set; }

        /// <summary>
        /// 姓名
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 移动电话
        /// </summary>
        public string MobilePhone { get; set; }

        /// <summary>
        /// 办公电话
        /// </summary>
        public string OfficePhone { get; set; }

        /// <summary>
        /// 登录名称
        /// </summary>
        public string Login_Name { get; set; }

        /// <summary>
        /// 登录密码
        /// </summary>
        public string PSD { get; set; }

        /// <summary>
        /// 所在部门编号
        /// </summary>
        public string DepartMent_ID { get; set; }

        /// <summary>
        /// 用户数据内容
        /// </summary>
        public byte[] User_Data { get; set; }
        
        /// <summary>
        /// 管理员类型，针对三员分立，将管理员类型分为
        /// 系统管理员（第一个字符）、安全保密管理员（第二个字符）和安全审计员（第三个字符），
        /// T表示具有对应管理员权限，F表示没有该管理员权限，
        /// 如TFF表示该用户具有系统管理员权限；
        /// FTT表示该用户具有安全保密管理员和安全审计员权限。
        /// 如果不需要进行三员分立，则该字段只有两种选项，即TTT表示该用户为超级系统管理员，FFF表示该用户为普通用户
        /// </summary>
        public string Admin_Type { get; set; }

        /// <summary>
        /// 用户状态，标识该用户是否被锁定（连续输错几次密码后可能会被锁定），locked表示被锁定；unlock表示未被锁定；默认为unlock
        /// </summary>
        public string Status { get; set; }

        /// <summary>
        /// 该用户最近一次被锁定时的服务器时间
        /// </summary>
        public DateTime LockedTime { get; set; }

        /// <summary>
        /// 是否已激活：1激活；0未激活；默认为0
        /// </summary>
        public string IsActive { get; set; }

        /// <summary>
        /// 密码生效时间，激活后开始生效
        /// </summary>
        public DateTime EffectiveTime { get; set; }

        ///// <summary>
        ///// 用户密级状态：0普通，1秘密，2机密
        ///// </summary>
        //public string SecretStatus { get; set; }

        /// <summary>
        /// 是否允许登录系统，true允许登录。
        /// </summary>
        /// <returns></returns>
        public bool AllowLogin()
        {
            if (ManageHelper.Administrator.Equals(Login_Name)) return true;
            if (string.IsNullOrWhiteSpace(Admin_Type) || "FFF".Equals(Admin_Type, StringComparison.CurrentCultureIgnoreCase)) return false;
            return true;
        }

        /// <summary>
        /// 是否是超级管理员
        /// </summary>
        /// <returns></returns>
        public bool IsAdministrator()
        {
            return ManageHelper.Administrator.Equals(Login_Name);
        }

        /// <summary>
        /// 是否是系统管理员
        /// </summary>
        /// <returns></returns>
        public bool IsSystemAdmin()
        {
            if (string.IsNullOrWhiteSpace(Admin_Type)) return false;
            if ("T".Equals(Admin_Type.Trim().Substring(0, 1).ToUpper())) return true;
            return false;
        }

        /// <summary>
        /// 是否是安全保密管理员
        /// </summary>
        /// <returns></returns>
        public bool IsSecurityAdmin()
        {
            if (string.IsNullOrWhiteSpace(Admin_Type)) return false;
            if ("T".Equals(Admin_Type.Trim().Substring(1, 1).ToUpper())) return true;
            return false;
        }

        /// <summary>
        /// 是否是安全审计员
        /// </summary>
        /// <returns></returns>
        public bool IsAuditAdmin()
        {
            if (string.IsNullOrWhiteSpace(Admin_Type)) return false;
            if ("T".Equals(Admin_Type.Trim().Substring(2, 1).ToUpper())) return true;
            return false;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            return string.Format("{名称:{0}}",Name);
        }

    }
}
